home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir31 / sndblst3.zip / WAVE.C < prev    next >
Text File  |  1993-10-25  |  3KB  |  135 lines

  1.  
  2. //------------------------------------------------------------------------------
  3. // Copyright (c) David Welch, 1993
  4. //------------------------------------------------------------------------------
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <conio.h>
  10.  
  11. #include "..\sb.h"
  12.  
  13. unsigned char ca;
  14. unsigned short ra;
  15. unsigned long la;
  16. FILE *fp;
  17. unsigned char gstring[80];
  18.  
  19. // for .WAV stuff
  20. unsigned long rID;
  21. unsigned long rLen;
  22. unsigned long wID;
  23. unsigned long fID;
  24. unsigned long fLen;
  25. unsigned long fNext;
  26. unsigned short wFormatTag;
  27. unsigned short nChannels;
  28. unsigned short nSamplesPerSec;
  29. unsigned short nAvgBytesPerSec;
  30. unsigned long dID;
  31. unsigned long dLen;
  32.  
  33. void main ( int argc, char *argv[] )
  34. {
  35.     if(argc==1)
  36.     {
  37.         printf(".WAV file not specified\n");
  38.         exit(1);
  39.     }
  40.     strcpy(gstring,argv[1]);
  41.     strcat(gstring,".WAV");
  42.     if((fp=fopen(gstring,"rb"))==0)
  43.     {
  44.         strcpy(gstring,argv[1]);
  45.         if((fp=fopen(gstring,"rb"))==0)
  46.         {
  47.             printf("Error opening .WAV file [%s]\n",argv[1]);
  48.             exit(1);
  49.         }
  50.     }
  51.     printf("FILE: [%s]\n",gstring);
  52.     sbsetup();
  53.     fread(&rID,1,4,fp);
  54.     if(rID!=0x46464952)
  55.     {
  56.         printf("Not a RIFF format file\n");
  57.         exit(1);
  58.     }
  59.     fread(&rLen,1,4,fp);
  60.     printf("rLen = %lu\n",rLen);
  61.     fread(&wID,1,4,fp);
  62.     if(wID!=0x45564157)
  63.     {
  64.         printf("Not a WAVE format chunk\n");
  65.         exit(1);
  66.     }
  67.     fread(&fID,1,4,fp);
  68.     if(fID!=0x20746D66)
  69.     {
  70.         printf("Not a fmt WAVE Format Chunk\n");
  71.         exit(1);
  72.     }
  73.     fread(&fLen,1,4,fp);
  74.     fNext=fLen+ftell(fp);
  75.     printf("fLen %lu\n",fLen);
  76.     printf("fNext %lu\n",fNext);
  77.     fread(&wFormatTag,1,2,fp);
  78.     if(wFormatTag!=1)
  79.     {
  80.         printf("Data is not PCM\n");
  81.         exit(1);
  82.     }
  83.     fread(&nChannels,1,2,fp);
  84.     if((nChannels!=1)&&(nChannels!=2))
  85.     {
  86.         printf("Must be MONO or STEREO data\n");
  87.         exit(1);
  88.     }
  89.     if(nChannels==2)
  90.     {
  91.         printf("STEREO data will be half speed (twice as much data played mono)\n");
  92.     }
  93.     printf("nChannels %u\n",nChannels);
  94.     fread(&nSamplesPerSec,1,2,fp);
  95.     printf("nSamplesPerSec %u\n",nSamplesPerSec);
  96.     fread(&nAvgBytesPerSec,1,2,fp);
  97.     printf("nAvgBytesPerSec %u\n",nAvgBytesPerSec);
  98.     fseek(fp,fNext,0);
  99.     fread(&dID,1,4,fp);
  100.     if(dID!=0x61746164)
  101.     {
  102.         printf("Not a DATA chunk\n");
  103.         exit(1);
  104.     }
  105.     fread(&dLen,1,4,fp);
  106.     printf("dLen %lu\n",dLen);
  107.     ca=256UL-(1000000UL/nSamplesPerSec);
  108.     printf("Time Constant %u\n",ca);
  109.     sbsettc(ca);
  110.     spkon();
  111.     while(dLen)
  112.     {
  113.         if(dLen>65000) la=65000; else la=dLen;
  114.         dLen-=la;
  115.         fread(aligned,1,la,fp);
  116.         sbplay(la);
  117.         printf("%lu Samples\n",la);
  118.         while(dmacount()!=0xFFFF)
  119.         {
  120.             if(kbhit())
  121.             {
  122.                 sbhaltdma();
  123.                 getch();
  124.                 dLen=0;
  125.                 break;
  126.             }
  127.         }
  128.     }
  129.     spkoff();
  130. }
  131. //------------------------------------------------------------------------------
  132. // Copyright (c) David Welch, 1993
  133. //------------------------------------------------------------------------------
  134.  
  135.